package com.zjcloud.jwgl.service;

import com.zjcloud.jwgl.domain.AcScheduleConstraintTemplate;
import com.zjcloud.jwgl.exception.TemplateValidationException;
import java.util.List;
import java.util.Map;

/**
 * 排课约束模板聚合服务接口
 * 将模板作为聚合根，提供更高层次的业务接口
 * 
 * @author zjcloud
 * @date 2024-12-19
 */
public interface IAcTemplateAggregateService {
    
    /**
     * 获取完整的模板信息（包含所有约束条件）
     * 
     * @param templateName 模板名称
     * @return 模板约束条件列表
     * @throws TemplateValidationException 当模板不存在或不完整时抛出异常
     */
    List<AcScheduleConstraintTemplate> getCompleteTemplate(String templateName) throws TemplateValidationException;
    
    /**
     * 验证模板完整性
     * 
     * @param templateName 模板名称
     * @return 验证结果，true表示完整，false表示不完整
     * @throws TemplateValidationException 当验证失败时抛出异常
     */
    boolean validateTemplateIntegrity(String templateName) throws TemplateValidationException;
    
    /**
     * 获取模板统计信息
     * 
     * @param templateName 模板名称
     * @return 统计信息映射
     */
    Map<String, Object> getTemplateStatistics(String templateName);
    
    /**
     * 创建完整的模板（包含所有约束条件）
     * 
     * @param templateName 模板名称
     * @param description 模板描述
     * @param constraintConfigs 约束条件配置列表
     * @return 创建成功的记录数
     * @throws TemplateValidationException 当创建失败时抛出异常
     */
    int createCompleteTemplate(String templateName, String description, List<Map<String, Object>> constraintConfigs) throws TemplateValidationException;
    
    /**
     * 复制模板
     * 
     * @param sourceTemplateName 源模板名称
     * @param targetTemplateName 目标模板名称
     * @param targetDescription 目标模板描述
     * @return 复制成功的记录数
     * @throws TemplateValidationException 当复制失败时抛出异常
     */
    int copyTemplate(String sourceTemplateName, String targetTemplateName, String targetDescription) throws TemplateValidationException;
    
    /**
     * 删除完整的模板（包含所有约束条件）
     * 
     * @param templateName 模板名称
     * @return 删除的记录数
     * @throws TemplateValidationException 当删除失败时抛出异常
     */
    int deleteCompleteTemplate(String templateName) throws TemplateValidationException;
    
    /**
     * 获取所有可用的模板名称列表
     * 
     * @return 模板名称列表
     */
    List<String> getAvailableTemplateNames();
    
    /**
     * 检查模板是否存在
     * 
     * @param templateName 模板名称
     * @return 存在返回true，不存在返回false
     */
    boolean templateExists(String templateName);
    
    /**
     * 获取模板的约束条件类型列表
     * 
     * @param templateName 模板名称
     * @return 约束条件类型列表
     */
    List<String> getTemplateConstraintTypes(String templateName);
    
    /**
     * 修复模板完整性（补充缺失的约束条件）
     * 
     * @param templateName 模板名称
     * @return 补充的约束条件数量
     * @throws TemplateValidationException 当修复失败时抛出异常
     */
    int repairTemplateIntegrity(String templateName) throws TemplateValidationException;
    
    /**
     * 批量验证多个模板的完整性
     * 
     * @param templateNames 模板名称列表
     * @return 验证结果映射，key为模板名称，value为验证结果
     */
    Map<String, Boolean> batchValidateTemplates(List<String> templateNames);
    
    /**
     * 获取模板的详细信息（用于展示）
     * 
     * @param templateName 模板名称
     * @return 模板详细信息
     */
    Map<String, Object> getTemplateDetails(String templateName);
}